AWS Application Composerを用いてYAMLテンプレートを作成し、リソースを構築してみた

AWS Application Composerを用いてYAMLテンプレートを作成し、リソースを構築してみた

Clock Icon2024.09.04

はじめに

かつまたです。リソース作成の検証の一環として、いくつかの方法でVPC、サブネット、IGW、EC2を利用した簡単な構成を作成してみました。このブログではAWS Application Composerを用いてYAMLテンプレートを作成し、CloudFormationでリソースを作成しました。
別の方法でのリソース作成については以下のブログに記載しました。

https://devio2024-front-preview.developers.io/articles/cloudformation-vpc-yaml-KS/

https://devio2024-front-preview.developers.io/articles/aws-cdk-vpc-katsumata/

構成図は以下の通りです。
CFn.drawio

AWS Application Composerとは

AWS Application Composerを利用することでビジュアルインターフェースを使用して、AWSサービスをキャンバス上にドラッグアンドドロップするGUIな方法で、アプリケーションのアーキテクチャを設計できます。
そして、ビジュアルインターフェースで設計したアーキテクチャに基づいて、自動的にCloudFormationテンプレートやSAMテンプレートを生成します。

AWS Application Composerでテンプレート作成

1.コンソールから「AWS CloudFormation」→「スタックを作成(新しいリソースを使用)」「プロジェクトの作成」を選択します。

スタック作成開始

2.「Application Conposerから構築」→「Application Composerで作成」を選択しキャンパスを開きます。

CFn→ApplicationComposer
2.画面左のタブから構成に必要なリソースを検索し、キャンパス上にドラッグ&ドロップします。
今回使用したリソースタイプ

  • AWS::EC2::VPC
  • AWS::EC2::Instance
  • AWS::EC2::SecurityGroup
  • AWS::EC2::Subnet
  • AWS::EC2::InternetGateway
  • AWS::EC2::VPCGatewayAttachment
  • アイコン雑ならべ

3.キャンパス上の各リソースをクリックし、リソース名とリソース構成(Properties)を記入します。

VPC
スクリーンショット 2024-09-03 12.19.48

記入例
CidrBlock: 10.0.0.0/16
EnableDnsSupport: true
EnableDnsHostnames: true

サブネット
Subnet

記入例
VpcId: !Ref katsumataVPCCFn
CidrBlock: 10.0.1.0/24
MapPublicIpOnLaunch: true

セキュリティグループ
スクリーンショット 2024-09-03 12.20.26

記入例
GroupDescription: Allow HTTP
VpcId: !Ref katsumataVPCCFn
SecurityGroupIngress:
  - IpProtocol: tcp
    FromPort: 80
    ToPort: 80
    CidrIp: !Ref MyIP
  - IpProtocol: tcp
     FromPort: 22
     ToPort: 22
     CidrIp: !Ref MyIP

EC2
スクリーンショット 2024-08-27 16.03.41

記入例
InstanceType: t2.micro
ImageId: ami-00c79d83cf718a893 #自身のリージョンに存在するAMI IDを記入
NetworkInterfaces:
  - AssociatePublicIpAddress: true
    DeviceIndex: '0'
    SubnetId: !Ref katsumataSubnetCFn
    GroupSet:
      - !Ref katsumataSgCFn

IGW
IGW

IGWをVPCへアタッチ
IGWアタッチ

記入例
VpcId: !Ref katsumataVPCCFn
InternetGatewayId: !Ref katsumataIGWCFn

4.全てのリソースに詳細を記述し、保存したのち、構成図を確認します。
アイコン最終

またテンプレートに切り替えることで生成されたYAMLテンプレートコードを確認することができます。
テンプレート作成確認

5.右上の「メニュー」→テンプレートを保存」でローカルに作成したテンプレートを保存します。
テンプレ保存

6.ローカル上で不足しているコードを記述します。今回の構成ではAWSTemplateFormatVersionとMyIPを指定するParametersを追加しました。

生成されたテンプレート

生成時
Resources:
  katsumataVPCCFn:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: true
      EnableDnsHostnames: true

  katsumataEC2CFn:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      ImageId: ami-00c79d83cf718a893
      NetworkInterfaces:
        - AssociatePublicIpAddress: true
          DeviceIndex: '0'
          SubnetId: !Ref katsumataSubnetCFn
          GroupSet:
            - !Ref katsumataSgCFn

  katsumataSgCFn:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow HTTP
      VpcId: !Ref katsumataVPCCFn
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: !Ref MyIP
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: !Ref MyIP

  katsumataSubnetCFn:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref katsumataVPCCFn
      CidrBlock: 10.0.1.0/24
      MapPublicIpOnLaunch: true

  katsumataIGWCFn:
    Type: AWS::EC2::InternetGateway
    Properties: {}

  katsumataVPCGatewayAttachmentCFn:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref katsumataVPCCFn
      InternetGatewayId: !Ref katsumataIGWCFn

修正後のテンプレート

修正後
#追加ここから
AWSTemplateFormatVersion: '2010-09-09'

Parameters:
  MyIP:
    Type: String
    Description: The IP address range that is allowed to access the instance
    Default: '104.28.204.107/32'
#追加ここまで
Resources:
  katsumataVPCCFn:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: true
      EnableDnsHostnames: true

  katsumataEC2CFn:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      ImageId: ami-00c79d83cf718a893
      NetworkInterfaces:
        - AssociatePublicIpAddress: true
          DeviceIndex: '0'
          SubnetId: !Ref katsumataSubnetCFn
          GroupSet:
            - !Ref katsumataSgCFn

  katsumataSgCFn:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow HTTP
      VpcId: !Ref katsumataVPCCFn
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: !Ref MyIP
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: !Ref MyIP

  katsumataSubnetCFn:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref katsumataVPCCFn
      CidrBlock: 10.0.1.0/24
      MapPublicIpOnLaunch: true

  katsumataIGWCFn:
    Type: AWS::EC2::InternetGateway
    Properties: {}

  katsumataVPCGatewayAttachmentCFn:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref katsumataVPCCFn
      InternetGatewayId: !Ref katsumataIGWCFn

保存したテンプレートからリソース作成

保存したテンプレートからCloudFormationでリソースを作成します。

1.先ほどのCloudFormationの「スタックを作成(新しいリソースを使用)」選択先の画面で、「既存のテンプレートを選択」→「テンプレートファイルのアップロード」→「ファイルの選択」から保存したテンプレートをアップロードします。
スタック作成ファイル選択

2.スタック名を記入します。
スタック詳細指定

3.スタックを作成し、Complete状態になることを確認します。
スクリーンショット 2024-08-27 16.41.38

4.コンソー上から作成した各リソースを確認することができます。余分なコストがかからないように、必要に応じてCloudFormationの「スタック」で作成したスタックを選択し、「削除」からスタックの削除を行います。
スタック削除

おわりに

AWS Application Composerを用いてテンプレートを作成した感想として、Propertiesに関してはコードを自分で記入する必要があるため、前提知識が必要だと感じました。しかし、ドラッグ&ドロップで直感的に操作できるため、比較的スピード感を持って構築ができる点は非常に良かったです。また、既存のテンプレートをキャンパス上で構築図として視覚化することができるため、構成の理解にも役立ちます。
ご覧いただきありがとうございました。

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.